package model

import (
	consts "github.com/easysoft/zendata/internal/pkg/const"
)

type ZdField struct {
	BaseModel

	Field string `json:"field"`
	Note  string `json:"note"`

	Range    string `json:"range"`
	Prefix   string `json:"prefix"`
	Postfix  string `json:"postfix"`
	Divider  string `json:"divider"`
	Loop     string `json:"loop"`
	Loopfix  string `json:"loopfix"`
	Format   string `json:"format"`
	Type     string `json:"type"`
	Mode     string `json:"mode"`
	Items    int    `json:"records"`
	Length   int    `json:"length"`
	LeftPad  string `json:"leftPad"`
	RightPad string `json:"rightPad"`
	Rand     bool   `json:"rand"`
	Config   string `json:"config"`
	Use      string `json:"use"`
	From     string `json:"fromCol"`
	Select   string `json:"selectCol"`
	Where    string `json:"whereCol"`
	Limit    int    `json:"limitCol"`

	// refer to yaml or text by using range prop
	Step   string `json:"step"`
	Repeat string `json:"repeat"`

	Exp      string `json:"exp"`
	DefID    uint   `json:"defID"`
	ParentID uint   `json:"parentID"`
	UseID    uint   `json:"useID"`
	ConfigID uint   `json:"configID"`

	Ord  int  `gorm:"default:1" json:"ord"`
	Join bool `json:"join"`

	Fields []*ZdField `gorm:"-" json:"fields"`
	Froms  []*ZdField `gorm:"-" json:"froms"`

	// for range edit
	IsRange  bool        `gorm:"default:true" json:"isRange"`
	Sections []ZdSection `gorm:"ForeignKey:ownerID" json:"sections"`

	// for refer edit
	Refer ZdRefer `gorm:"ForeignKey:ownerID" json:"refer"`

	// generated by range or refer
	GeneratedBy consts.GeneratedBy `gorm:"default:range" json:"generatedBy"`
}

func (*ZdField) TableName() string {
	return consts.TablePrefix + "field"
}
